/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package grafrajz.utils;

import java.awt.Color;

/**
 * A gráf egy élének reprezentációja. Tartalmazza az él forrás és cél csúcsát* és az él súlyát amennyiben a gráf súlyozott
 * *Valójában nem a tényleges csúcsot tartalmazza, csak egy "üres" csúcsot, az éllistája üres. A csúcs összehasonlításakor ez a csúcs megegyezik egy élekkel feltöltött csúccsal
 * @author adam_fejes_dell
 */
public class Edge {
    private Node source, dest; //Az él tudja hogy mi a forrás csúcsa, mert amúgy nehéz lenne toString() függvényt írni hozzá
    private int weight;
    private Color color;

    /**
     * Él konstruktor (súlyozott gráf esetén)
     * @param dest Az él cél csúcsa
     * @param weight Az él súlya (költsége)
     */
    public Edge(Node source, Node dest, int weight) {
        this.source = source;
        this.dest = dest;
        this.weight = weight;
        
        this.color = Color.blue;
    }
    
    /**
     * Él konstruktor (súlyozatlan gtáf esetén)
     * @param dest Az él cél csúcsa
     */
    public Edge(Node source, Node dest) {
        this.source = source;
        this.dest = dest;
        
        this.color = Color.blue;
    }

    public int getWeight() {
        return weight;
    }

    public void setWeight(int weight) {
        this.weight = weight;
    }

    public Node getDest() {
        return dest;
    }

    public void setDest(Node dest) {
        this.dest = dest;
    }

    public Node getSource() {
        return source;
    }

    public void setSource(Node source) {
        this.source = source;
    }

    public Color getColor() {
        return color;
    }

    public void setColor(Color color) {
        this.color = color;
    }
    
    

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final Edge other = (Edge) obj;
        if (this.source != other.source && (this.source == null || !this.source.equals(other.source))) {
            return false;
        }
        if (this.dest != other.dest && (this.dest == null || !this.dest.equals(other.dest))) {
            return false;
        }
        return true;
    }

    @Override
    public int hashCode() {
        int hash = 7;
        hash = 29 * hash + (this.source != null ? this.source.hashCode() : 0);
        hash = 29 * hash + (this.dest != null ? this.dest.hashCode() : 0);
        return hash;
    }

    

    

    @Override
    public String toString() {
        if(weight != 0)
            return source + " -> " + weight + " -> " + dest;
        else
            return source + " -> " + dest;
    }
    
    
}
